DestinationRule (istio)
GPT-4o.icon
Istio の DestinationRule は、サービスの宛先に対するポリシーを定義するリソースです。
たとえば、通信先のサービスに対して、接続先のバージョン(subset)を指定したり、TLS 設定やロードバランスの方法、コネクションプールの制御などを行うために使います。
🔹 基本構文
code:yaml
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: example-destination-rule
spec:
host: my-service.default.svc.cluster.local
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
trafficPolicy:
tls:
mode: ISTIO_MUTUAL
loadBalancer:
simple: ROUND_ROBIN
🔸 主なフィールド解説
host
宛先サービスを指定します(FQDN か短縮名)。
通常は VirtualService で指定するホストと一致させます。
subsets
バージョンやロールごとの「サービスのグループ化」。
Deployment などに設定されているラベルに基づいてルーティング先を決定。
trafficPolicy
サービスへの接続に関する全体ポリシー(ロードバランス、TLS、接続数など)。
🔹 よくある用途
1. バージョン別のルーティング
subsets により v1, v2 のようなラベルベースのバージョン分けをし、VirtualService でリクエストの 80% を v1 に、20% を v2 に振り分けるなどの操作が可能。
2. TLS の強制
mTLS を有効にするには trafficPolicy.tls.mode: ISTIO_MUTUAL を指定。
3. ロードバランス制御
ラウンドロビン、最小接続数、ランダムなどを設定可能。
code:yaml
trafficPolicy:
loadBalancer:
simple: LEAST_CONN
4. 接続制限や再試行ポリシー
コネクションプールのサイズや再試行回数なども細かく設定可能。
DestinationRule は「宛先の定義」、VirtualService は「ルーティングの定義」であり、組み合わせて使うことで柔軟なトラフィック制御が実現できます。
code:yaml
# VirtualService 側で subset を使ってルーティング
spec:
http:
- route:
- destination:
host: my-service
subset: v1
weight: 80
- destination:
host: my-service
subset: v2
weight: 20
🔍 Tips
DestinationRule がないと VirtualService の subset は使えません。
DestinationRule はサービスごとに 1 つだけ存在するのが推奨されます。
mTLS 設定ミスがあると通信できなくなるので注意。